"""
有n个人参加某个项目比赛，每个人有两次机会，每个人参加项目后的得分x都被记录下来。
如果成绩不达标，则会扣分，记得分可能为负数。所有人比赛完成后，得到2*n个积分，
这些积分两两组合成n个积分对。有一个项目历史平均打分averageScore，
现在将积分两两组合相加，希望所有积分对和都可以被平均得分averageScore整除。
若可以组成这样的积分对时，请输出组合方案，若无法组成这样的积分对，请输出0。
积分对输出时，请先输出积分对中较大的数。如averageScore=5的话，
1 10 5 4 3 2 7 6 8 -1-》10 5 8 7 6 4 3 2 1 -1，

第二题：
    两两配对是否能被k整除。根据同余定理，对所有的数求余数，只要余数相加等于k即能被k整除，
    余数分别放到k个列表里面，配对的时候，可以直接查询，比如当前数num的余数的1，
    直接去余数是k-1的列表里面找就行了。另外循序上的要求直接排序就能满足。
"""


class Solution:
    def main(self, a, score):
        avg = a[0]
        n = a[1]
        arr = sorted(score, reverse=True)

        modeList = [[] for _ in range(avg)]
        for num in arr:
            mode = num % avg
            modeList[mode].append(num)
        print(modeList)

        ans = []
        flag = True
        for mod, nums in enumerate(modeList):
            if mod > avg // 2:
                break

            if mod == 0 or mod == avg - mod:
                if len(nums) % 2 == 1:
                    flag = False
                    break
                else:
                    for i in range(len(nums) // 2):
                        if nums[2 * i] > nums[2 * i + 1]:
                            ans.append((nums[2 * i], nums[2 * i + 1]))
                        else:
                            ans.append((nums[2 * i + 1], nums[2 * i]))
            else:
                if not len(nums) == len(modeList[avg - mod]):
                    flag = False
                    break
                else:
                    for num1, num2 in zip(nums, modeList[avg - mod]):
                        print('nums', nums)
                        print('modeList[avg - mod]', modeList[avg - mod])
                        print('num1:', num1, num2)
                        if num1 < num2:
                            ans.append((num2, num1))
                        else:
                            ans.append((num1, num2))

        if not flag:
            print(0)
        else:
            ans = sorted(ans, key=lambda x: (x[0] + x[1], x[0]), reverse=True)
            out = []
            for num1, num2 in ans:
                out.append(str(num1))
                out.append(str(num2))
            print(' '.join(out))


class Solution1:
    def main(self, a, score):

        avg = a[0]
        n = a[1]
        score = sorted(score, reverse=True)
        modeList = [[] for _ in range(avg)]
        for num in score:
            mode = num % avg
            modeList[mode].append(num)
        flag = True
        ans = []

        for mode, nums in enumerate(modeList):
            if mode > avg // 2:
                break

            if mode == 0 or mode == avg - mode:
                if len(nums) % 2 == 1:
                    flag = False
                    break
                else:
                    for i in range(len(nums) // 2):
                        a = nums[2 * i]
                        b = nums[2 * i + 1]
                        if a > b:
                            ans.append((a, b))
                        else:
                            ans.append((b, a))
            else:
                if not len(nums) == len(modeList[avg - mode]):
                    flag = False
                    break
                else:
                    for num1, num2 in zip(nums, modeList[avg - mode]):
                        if num1 > num2:
                            ans.append((num1, num2))
                        else:
                            ans.append((num2, num1))

        if not flag:
            print(0)
        else:
            ans = sorted(ans, key=lambda x: (x[0] + x[1], x[0]), reverse=True)
            out = []
            for num1, num2 in ans:
                out.append(str(num1))
                out.append(str(num2))
            print(' '.join(out))


if __name__ == "__main__":
    # A = Solution()
    # print(A.main([5, 5], [1, 10, 5, 4, 3, 2, 7, 6, 8, -1]))
    # print(A.main([1, 3, 6], [2]))
    print('--------------------------------------------------------------------')
    A = Solution1()
    A.main([5, 5], [1, 10, 5, 4, 3, 2, 7, 6, 8, -1])
    # print(A.main([1, 3, 6], [2]))
